/*题目：
 * 公司正在开发一个图形设计软件，其中有一个常用的图形元素是矩形。
  设计师在工作时可能需要频繁地创建相似的矩形，而这些矩形的基本属性是相同的（颜色、宽度、高度），
  为了提高设计师的工作效率，请你使用原型模式设计一个矩形对象的原型。使用该原型可以快速克隆生成新的矩形对象。
 * 输入：首先输入一个字符串，表示矩形的基本属性信息，包括颜色、长度和宽度，用空格分隔，例如 "Red 10 5"。
        然后输入一个整数 N（1 ≤ N ≤ 100），表示使用原型创建的矩形数量。
 * 输出：对于每个矩形，输出一行字符串表示矩形的详细信息，如 "Color: Red, Width: 10,Height: 5"。
 * 示例：
 *      输入：3
           Red 10 5
           Red 10 5
           Red 10 5
        输出：Color: Red, Width: 10, Height: 5
             Color: Red, Width: 10, Height: 5
             Color: Red, Width: 10, Height: 5
 * */

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class ProtoType{
public:
    virtual ProtoType* clone() const=0;
    virtual string getDetail() const=0;
    virtual ~ProtoType(){}
};
class Rectangle:public ProtoType{
private:
    string color;
    int width;
    int height;
public:
    Rectangle(string c,int w,int h):color(c),width(w),height(h) {}
    ProtoType* clone() const override{
        return new Rectangle(*this);
    }
    string getDetail() const override{
        string res="Color: "+color+" Width: "+ to_string(width)+" height: "+ to_string(height);
        return res;
    }
};
int main(){
    vector<ProtoType*> rect;

    int num=0;
    cin>>num;

    // 读取每个矩形的属性信息并创建矩形对象
    for (int i = 0; i < num; ++i) {
        string color="";
        int width,height;

        cin>>color>>width>>height;

        ProtoType* originalRect=new Rectangle(color,width,height);

        rect.push_back(originalRect);
    }

    //克隆对象
    for (auto& re:rect) {
        ProtoType* clonedRect=re->clone();
        cout<<re->getDetail()<<endl;

        delete clonedRect;
    }

    for (auto& re:rect) {
        delete re;
    }
    return 0;
}